package com.ruoyi.api.controller;

import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletResponse;

import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.domain.DzKcjl;
import com.ruoyi.system.domain.DzKecheng;
import com.ruoyi.system.domain.DzZhangjie;
import com.ruoyi.system.service.*;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.system.domain.DzXuexi;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;

/**
 * 学习记录Controller
 * 
 * @author ruoyi
 * @date 2022-09-28
 */
@RestController
@RequestMapping("/api/xuexi")
public class DzXuexiApiController extends BaseController
{
    @Autowired
    private IDzXuexiService dzXuexiService;

    @Autowired
    private IDzKcjlService dzKcjlService;

    @Autowired
    private IDzKechengService KechengService;

    @Autowired
    private IDzZhangjieService zhangjieService;

    @Autowired
    private ISysDeptService sysDeptService;

    /**
     * 查询学习记录列表
     */
    @GetMapping("/list")
    public TableDataInfo list(DzXuexi dzXuexi)
    {
        startPage();
        List<DzXuexi> list = dzXuexiService.selectDzXuexiListWeb(dzXuexi);
        return getDataTable(list);
    }

    /**
     * 导出学习记录列表
     */
    @Log(title = "学习记录", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, DzXuexi dzXuexi)
    {
        List<DzXuexi> list = dzXuexiService.selectDzXuexiListWeb(dzXuexi);
        ExcelUtil<DzXuexi> util = new ExcelUtil<DzXuexi>(DzXuexi.class);
        util.exportExcel(response, list, "学习记录数据");
    }

    /**
     * 获取学习记录详细信息
     */
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") Long id)
    {

        return AjaxResult.success(dzXuexiService.selectDzXuexiById(id));
    }

    /**
     * 新增学习记录
     */
    @PostMapping
    public AjaxResult add(@RequestBody DzXuexi dzXuexi)
    {
        //获取课程记录
        DzKcjl kcjl=null;
        DzKcjl query=new DzKcjl();
        query.setHuiyuanId(dzXuexi.getHuiyuanId());
        query.setKcId(dzXuexi.getKcId());
        List<DzKcjl> kcjllist = dzKcjlService.selectDzKcjlListWeb(query);
        if(kcjllist!=null&&kcjllist.size()>0){
            kcjl= kcjllist.get(0);
        }
        DzKecheng kecheng = KechengService.selectDzKechengByKcId(dzXuexi.getKcId());

        DzZhangjie zhangjie = zhangjieService.selectDzZhangjieByZjId(dzXuexi.getZjId());
        dzXuexi.setTitle(zhangjie.getZjName());
        //获取当前课程的总时长
        DzXuexi query2 = new DzXuexi();
        query2.setHuiyuanId(dzXuexi.getHuiyuanId());
        query2.setKcId(dzXuexi.getKcId());
        long zong = 0l;
        List<DzXuexi> zslist = dzXuexiService.selectDzXuexiListWeb(query2);
        for(DzXuexi tmp : zslist){
            if(tmp.getLeiji()!=null){
                zong+=tmp.getLeiji();
            }
        }

        DzXuexi query5 = new DzXuexi();
        query5.setHuiyuanId(dzXuexi.getHuiyuanId());
        query5.setZjId(dzXuexi.getZjId());
        List<DzXuexi> zjlist = dzXuexiService.selectDzXuexiListWeb(query5);



        //获取当前用户对应当前章节的学习记录是否存在，不存在就新增
        if(zjlist!=null&&zjlist.size()>0){
            DzXuexi temp = zjlist.get(0);
            dzXuexiService.updateDzXuexi(temp);

            temp.setZjTime(new Date());
            if(kcjl==null){
                kcjl.setZjTime(dzXuexi.getZjTime());
                kcjl.setZongtime(zong);
                kcjl.setIswc(zong>kecheng.getKctotal()?1:0);
                long per = StringUtils.getper(zong,kecheng.getKctotal());
                kcjl.setWcper(Integer.parseInt(per+""));

                dzKcjlService.updateDzKcjl(kcjl);
            }

            return toAjax(1);
        }else{


            if(kcjl==null){
                kcjl = new DzKcjl();
                kcjl.setKcId(dzXuexi.getKcId());
                kcjl.setHuiyuanId(dzXuexi.getHuiyuanId());
                kcjl.setKctype(Integer.parseInt(dzXuexi.getKctype()));
                kcjl.setIswc(0);
                kcjl.setTitle(kecheng.getTitle());
                kcjl.setCovPic(kecheng.getCovPic());
                kcjl.setZongtime(0l);
                SysDept dept = sysDeptService.selectDeptById(kecheng.getDeptId());
                kcjl.setDeptName(dept.getDeptName());
                kcjl.setWcper(0);
                dzKcjlService.insertDzKcjl(kcjl);
                //变更课程学习人数
                DzKcjl temp2 = new DzKcjl();
                temp2.setKcId(kecheng.getKcId());
                List<DzKcjl> list3 = dzKcjlService.selectDzKcjlListWeb(temp2);
                if(list3!=null&&list3.size()>0){
                    kecheng.setXxcount(Long.parseLong(list3.size()+"") );
                    KechengService.updateDzKecheng(kecheng);
                }
            }

            dzXuexi.setZjTime(new Date());
            return toAjax(dzXuexiService.insertDzXuexi(dzXuexi));
        }

    }

    /**
     * 修改学习记录
     */
    @PutMapping
    public AjaxResult edit(@RequestBody DzXuexi dzXuexi)
    {
        DzZhangjie zhangjie = zhangjieService.selectDzZhangjieByZjId(dzXuexi.getZjId());
        //获取课程记录
        DzKcjl kcjl=null;
        DzKcjl query=new DzKcjl();
        query.setHuiyuanId(dzXuexi.getHuiyuanId());
        query.setKcId(dzXuexi.getKcId());
        query.setKctype(Integer.parseInt(dzXuexi.getKctype()));
        List<DzKcjl> kcjllist = dzKcjlService.selectDzKcjlListWeb(query);
        if(kcjllist!=null&&kcjllist.size()>0){
            kcjl= kcjllist.get(0);
        }
        DzKecheng kecheng = KechengService.selectDzKechengByKcId(dzXuexi.getKcId());
        //获取当前用户对应当前章节的学习记录
        DzXuexi dzXuexi2 = new DzXuexi();
        dzXuexi2.setKcId(dzXuexi.getKcId());
        dzXuexi2.setHuiyuanId(dzXuexi.getHuiyuanId());
        dzXuexi2.setZjId(dzXuexi.getZjId());
        dzXuexi2.setKctype(dzXuexi.getKctype());
        List<DzXuexi> list = dzXuexiService.selectDzXuexiListWeb(dzXuexi2);
        if (list!=null&&list.size()>0){
            DzXuexi temp = list.get(0);
            if(temp.getLeiji()<dzXuexi.getLeiji()){
                temp.setLeiji(dzXuexi.getLeiji());
            }
            temp.setFinish(dzXuexi.getFinish());
            temp.setTitle(zhangjie.getZjName());
            temp.setZongtime(dzXuexi.getZongtime());
            dzXuexiService.updateDzXuexi(temp);
            //获取当前课程的总时长
            DzXuexi query2 = new DzXuexi();
            query2.setHuiyuanId(dzXuexi.getHuiyuanId());
            query2.setKcId(dzXuexi.getKcId());
            long zong = 0l;
            List<DzXuexi> zslist = dzXuexiService.selectDzXuexiListWeb(query2);
            for(DzXuexi tmp : zslist){
                if(tmp.getLeiji()!=null){
                    zong+=tmp.getLeiji();
                }
            }

            if(kcjl!=null){
                kcjl.setZjTime(dzXuexi.getZjTime());
                kcjl.setZongtime(zong);
                kcjl.setIswc(zong>=kecheng.getKctotal()?1:0);
                long per = StringUtils.getper(zong,kecheng.getKctotal());
//                if(per>=99){
//                    per=100l;
//                }
                kcjl.setWcper(Integer.parseInt(per+""));
                dzKcjlService.updateDzKcjl(kcjl);
            }
            return toAjax(1);
        }else{
            return toAjax(1);
        }


    }

    /**
     * 删除学习记录
     */
    @Log(title = "学习记录", businessType = BusinessType.DELETE)
	@DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable Long[] ids)
    {
        return toAjax(dzXuexiService.deleteDzXuexiByIds(ids));
    }
}
